/*

面向对象的三大特性：封装 、继承、多态

Dart中的类的继承：  
    1、子类使用extends关键词来继承父类
    2、子类会继承父类里面可见的属性和方法 但是不会继承构造函数
    3、子类能复写父类的方法 getter和setter

*/

// class Person {
//   String name = '张三丰';
//   num age = 19;

//   void printInfo() {
//     print("${this.name}---${this.age}");
//   }
// }

class Person {
  String name;
  num age;

  Person(this.name, this.age);
  void printInfo() {
    print("${this.name}---${this.age}");
  }

  work() {
    print("${this.name}在工作……");
  }
}

class Web extends Person {
  // Web(super.name, super.age);
  late String sex;
  Web(String name, num age, String sex) : super(name, age) {
    this.sex = sex;
  }
  run() {
    print("${this.name}---${this.age}---${this.sex}");
    super.work(); //子类调用父类方法
  }

  // 覆写父类的方法
  @override
  void printInfo() {
    print("姓名：${this.name}---年龄：${this.age}---性别：${this.sex}");
  }
}

void main() {
  Web w = new Web('张大伟', 34, '男');
  print(w.name);
  w.printInfo();
  w.run();
}
